Django 1.11 con PostgreSQL.
Voy a migrar mi sitio y models.py arroja el error de que no puedo tener más de una clave principal. No puedo ver dónde lo hago (o no entiendo cómo).
class Employee(models.Model): Aegis_ID = models.UUIDField(primary_key=True, null=False, default=uuid.uuid4, editable=False, serialize=True) Employee_Number = models.ForeignKey('self', on_delete=models.CASCADE, related_name='Company_Employee_Number', null=True, blank=True, max_length=6, help_text="Employee ID") Employee_FName = models.CharField(null=True, blank=True, max_length=25, help_text="First Name") Employee_LName = models.CharField(null=True, blank=True, max_length=25, help_text="Last Name") Employee_Email = models.EmailField(max_length=80, blank=True, help_text="GPM Email address") Employee_Position = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='Department_Employee_Position', max_length=3, choices=EMPLOYEE_POSITION, help_text="Select position of this Employee.") Hire_Date = models.DateField(null=True, blank=True, help_text="Enter the employee hire date.") Employee_Division = models.CharField(max_length=2, null=True, blank=True, choices=DIVISION_CHOICES, help_text="Assign the Audit Division for this employee.") Employee_Region = models.CharField(max_length=3, null=True, blank=True, choices=REGION_CHOICES, help_text="Assign the Audit Region for this employee.") Employee_District = models.CharField(max_length=3, null=True, blank=True, choices=DISTRICT_CHOICES, help_text="Assign the Audit District for this Employee.")Al leer las páginas de Django sobre este tema exacto, aparece como un problema resuelto en 1.7 y tiene que ver con cómo Django ordenaba las tablas por clase, alfabéticamente.
También probé python manage.py flush seguido de makemigrations antes de migrate
Entonces, ¿qué campos está Django / Postgres intentando hacer una "id" y "primary" porque simplemente no entiendo, aquí ...
De acuerdo con la documentación de Django con respecto a las claves primarias automáticas, existe lo que no se ve es id = models.AutoField(primary_key=True) pero también entendí que si asignas primary_key=True a un campo, esto no se aplica
En su modelo anterior, no se permiten claves primarias múltiples para la tabla "app_employee".
No viene porque tienes
Aegis_ID = models.UUIDField(primary_key=True, null=False, default=uuid.uuid4, editable=False, serialize=True)Porque en la documentación de Django se especifica claramente que
Documentación de Django
Field.primary_key Si es True, este campo es la clave principal del modelo.
Si no especificas primary_key=True para ningún campo en tu modelo, Django agregará automáticamente un AutoField para contener la clave principal, por lo que no necesitas establecer primary_key=True en ninguno de tus campos a menos que quieras anular el Comportamiento predeterminado de clave principal.
primary_key=Verdadero implica nulo=Falso y único=Verdadero. Solo se permite una clave principal en un objeto.
He probado su modelo en mi proyecto y está funcionando absolutamente bien. Por simplicidad eliminé otros campos.
modelos.py
from __future__ import unicode_literals from django.db import models import uuid class Employee(models.Model): Aegis_ID = models.UUIDField(primary_key=True, null=False,default=uuid.uuid4, editable=False, serialize=True) Employee_Number = models.ForeignKey('self', on_delete=models.CASCADE, related_name='Company_Employee_Number', null=True, blank=True, max_length=6, help_text="Employee ID") Employee_FName = models.CharField(null=True, blank=True, max_length=25, help_text="First Name") Employee_LName = models.CharField(null=True, blank=True, max_length=25, help_text="Last Name") Employee_Email = models.EmailField(max_length=80, blank=True, help_text="GPM Email address")y cuando lo hice
(venv) astikanand@Developer-PC:~/firstsite$ python manage.py makemigrations Migrations for 'employee': employee/migrations/0001_initial.py - Create model Employeey entonces
(venv) astikanand@Developer-PC:~/firstsite$ python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, employee, sessions Running migrations: Applying employee.0001_initial... OKpor lo que está funcionando bien .
lo que tienes que hacer es
Ya sea que vuelva a crear su aplicación o simplemente comience su proyecto de nuevo, puede haber algunos problemas de dependencia o algo así. Pero su código para el modelo Employee está bien.
Es muy posible que haya cambiado las claves principales y/o las referencias a otros modelos/tablas y algunas dependencias heredadas permanecieron en los archivos de migración.
Consulte la documentación oficial de Django para revertir migraciones pasadas. No es necesario que reinicie su proyecto para eliminar las dependencias.
python manage.py makemigrations --empty yourappnameEso es. Luego verifique el archivo 0001_initial.py en la carpeta de migraciones en su aplicación para asegurarse de que se hayan eliminado todas las dependencias. Debería verse como:
from django.db import migrations class Migration(migrations.Migration): dependencies = [ ('yourappname', '0001_initial'), ] operations = [ ]